/*******************************************************************************
 * 版权：北京润尼尔网络科技有限公司，保留所有版权<br>
 * 版本：v1.0.0<br>
 * 文件：UICompositeTreeGrid.js<br>
 * 日期：2016年8月8日<br>
 * 作者: 刘昭<br>
 * 功能：树形图表格 组件<br>
 * 
 * 修改记录：<br>
 * 日期 描述 更新功能<br>
 ******************************************************************************/

window.makeNamespace(window,"Rainier.UI.V2");


/**
 * 类型名称：Rainier.UI.V2.UICompositeTreeGrid<br>
 * 类型功能：树形图表格类声明<br>
 */
Rainier.UI.V2.UICompositeTreeGrid = Rainier.UI.V2.UIComposite.extend({
	
	NAME : "Rainier.UI.V2.UICompositeTreeGrid",
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTreeGrid.init<br>
	 * 函数功能：构造函数<br>
	 * 参数输入：objParentComposite  	父组件实例<br>
	 * 参数输入：objProperties		 	组件属性定义<br>	
	 * 异常信息：<br>
	 */
	init : function(objParentComposite,objProperties){
		//使用父类初始化子类对象
		this._super(objParentComposite,objProperties);
	},

	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTreeGrid.appendEventHandler<br>
	 * 函数功能：添加事件代理<br>
	 * 参数输入：无<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：<br>
	 */
	appendEventHandler : function(){		
		this.m_aEventList = ['onBeforeLoad',
		                     'onLoad',
		                     'onLoadSuccess',
		                     'onLoadError',
		                     'onBeforeOpen',
		                     'onOpen',
		                     'onBeforeClose',
		                     'onClose',
		                     'onBeforeDestroy',
		                     'onDestroy',
		                     'onBeforeCollapse',
		                     'onCollapse',
		                     'onBeforeExpand',
		                     'onExpand',
		                     'onResize',
		                     'onMove',
		                     'onMaximize',
		                     'onRestore',
		                     'onMinimize',
		                     'onClickRow',
		                     'onDblClickRow',
		                     'onClickCell',
		                     'onDblClickCell',
		                     'onBeforeSortColumn',
		                     'onSortColumn',
		                     'onResizeColumn',
		                     'onBeforeSelect',
		                     'onSelect',
		                     'onBeforeUnselect',
		                     'onUnselect',
		                     'onSelectAll',
		                     'onUnselectAll',
		                     'onBeforeCheck',
		                     'onCheck',
		                     'onBeforeUncheck',
		                     'onUncheck',
		                     'onCheckAll',
		                     'onUncheckAll',
		                     'onBeforeEdit',
		                     'onBeginEdit',
		                     'onEndEdit',
		                     'onAfterEdit',
		                     'onCancelEdit',
		                     'onHeaderContextMenu',
		                     'onRowContextMenu',
		                     'onBeforeCheckNode',
		                     'onCheckNode',
		                     'onContextMenu',
		                     ];
		this._super();
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTreeGrid.createComposite<br>
	 * 函数功能：创建组件<br>
	 * 参数输入：eleParent : 父组件的节点元素<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	createComposite : function(eleParent){
		this._super(eleParent);		
		var newEle = this.CreateElement("table",this.m_objProperties.id);
		eleParent.append(newEle);
		newEle.treegrid(this.m_objProperties);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTreeGrid.callUiMethod<br>
	 * 函数功能：添加事件代理<br>
	 * 参数输入：sMethod 方法名称
	 * 参数输入：objArgs 方法参数
	 * 函数返回：无<br>
	 * 异常信息：<br>
	 */
	callUiMethod : function(sMethod,objArgs){
		return this.getElement().treegrid(sMethod,objArgs);
	},
	
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTreeGrid.options<br>
	 * 函数功能：返回树形网格（treegrid）的选项（options）。<br>
	 * 参数输入：无<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	options : function(){
		return this.getElement().treegrid('options');
	},

	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTreeGrid.resize<br>
	 * 函数功能：设置树形网格（treegrid）的尺寸。<br>
	 * 参数输入：options 参数包含两个属性：
	 * 					width：树形网格（treegrid）的新宽度。
	 * 					height：树形网格（treegrid）的新高度。<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	resize: function(options){
		return this.getElement().treegrid('resize',options);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTreeGrid.fixRowHeight<br>
	 * 函数功能：固定指定行的高度。<br>
	 * 参数输入：id		节点ID<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	fixRowHeight: function(id){
		return this.getElement().treegrid('fixRowHeight',id);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTreeGrid.loadData<br>
	 * 函数功能：加载树形网格（treegrid）的数据。<br>
	 * 参数输入：data		网格数据<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	loadData: function(data){
		return this.getElement().treegrid('loadData',data);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTreeGrid.load<br>
	 * 函数功能：加载并显示第一页。<br>
	 * 参数输入：param	
	 * 			{
	 *			 	q: 'abc',
	 * 				name: 'name1'
	 * 			}<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	load: function(param){
		return this.getElement().treegrid('load',param);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTreeGrid.reload<br>
	 * 函数功能：重新加载树形网格（treegrid）的数据。如果传递了 'id' 参数，则重新加载树的指定行，否则重新加载树的所有行。<br>
	 * 参数输入：id	三种方式
	 * 			$('#tt').treegrid('reload', 2);	// reload the row which value is equals to 2
	 * 			$('#tt').treegrid('reload');	// reload the all rows
	 * 			$('#tt').treegrid('reload', {id:2, q:'abc'});  // reload the specified row with 'q' parameter passing to server<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	reload: function(id){
		return this.getElement().treegrid('reload',id);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTreeGrid.reloadFooter<br>
	 * 函数功能：重新加载底部数据。<br>
	 * 参数输入：footer		底部数据<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	reloadFooter: function(footer){
		return this.getElement().treegrid('reloadFooter',footer);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTreeGrid.getData<br>
	 * 函数功能：获取加载的数据。<br>
	 * 参数输入：无<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	getData: function(){
		return this.getElement().treegrid('getData');
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTreeGrid.getFooterRows<br>
	 * 函数功能：获取底部数据。<br>
	 * 参数输入：无<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	getFooterRows: function(){
		return this.getElement().treegrid('getFooterRows');
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTreeGrid.getRoot<br>
	 * 函数功能：获取根节点，返回节点对象。<br>
	 * 参数输入：无<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	getRoot: function(){
		return this.getElement().treegrid('getRoot');
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTreeGrid.getRoots<br>
	 * 函数功能：获取根节点，返回节点数组。<br>
	 * 参数输入：无<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	getRoots: function(){
		return this.getElement().treegrid('getRoots');
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTreeGrid.getParent<br>
	 * 函数功能：获取父节点。<br>
	 * 参数输入：id		节点ID<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	getParent: function(id){
		return this.getElement().treegrid('getParent',id);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTreeGrid.getChildren<br>
	 * 函数功能：获取子节点。<br>
	 * 参数输入：id		节点ID<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	getChildren: function(id){
		return this.getElement().treegrid('getChildren',id);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTreeGrid.getSelected<br>
	 * 函数功能：获取选中的节点并返回它，如果没有选中节点则返回 null。<br>
	 * 参数输入：无<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	getSelected: function(){
		return this.getElement().treegrid('getSelected');
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTreeGrid.getSelections<br>
	 * 函数功能：获取所有选中的节点。<br>
	 * 参数输入：无<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	getSelections: function(){
		return this.getElement().treegrid('getSelections');
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTreeGrid.getCheckedNodes<br>
	 * 函数功能：获取指定节点的层级。<br>
	 * 参数输入：无<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	getCheckedNodes: function(){
		return this.getElement().treegrid('getCheckedNodes');
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTreeGrid.getLevel<br>
	 * 函数功能：获取指定节点的层级。<br>
	 * 参数输入：id		节点ID<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	getLevel: function(id){
		return this.getElement().treegrid('getLevel',id);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTreeGrid.find<br>
	 * 函数功能：找到指定节点并返回该节点数据。<br>
	 * 参数输入：id		节点ID<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	find: function(id){
		return this.getElement().treegrid('find',id);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTreeGrid.select<br>
	 * 函数功能：选择节点。<br>
	 * 参数输入：id		节点ID<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	select: function(id){
		return this.getElement().treegrid('select',id);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTreeGrid.unselect<br>
	 * 函数功能：取消选择节点。<br>
	 * 参数输入：id		节点ID<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	unselect: function(id){
		return this.getElement().treegrid('unselect',id);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTreeGrid.selectAll<br>
	 * 函数功能：选择所有节点。<br>
	 * 参数输入：无<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	selectAll: function(){
		return this.getElement().treegrid('selectAll');
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTreeGrid.unselectAll<br>
	 * 函数功能：取消选择所有节点。<br>
	 * 参数输入：无<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	unselectAll: function(){
		return this.getElement().treegrid('unselectAll');
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTreeGrid.checkNode<br>
	 * 函数功能：把指定节点设置为勾选。<br>
	 * 参数输入：id		节点ID<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	checkNode: function(id){
		return this.getElement().treegrid('checkNode',id);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTreeGrid.uncheckNode<br>
	 * 函数功能：把指定节点设置为未勾选。<br>
	 * 参数输入：id		节点ID<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	uncheckNode: function(id){
		return this.getElement().treegrid('uncheckNode',id);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTreeGrid.collapse<br>
	 * 函数功能：折叠节点。<br>
	 * 参数输入：id		节点ID<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	collapse: function(id){
		return this.getElement().treegrid('collapse',id);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTreeGrid.expand<br>
	 * 函数功能：展开节点。<br>
	 * 参数输入：id		节点ID<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	expand: function(id){
		return this.getElement().treegrid('expand',id);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTreeGrid.collapseAll<br>
	 * 函数功能：折叠所有的节点。<br>
	 * 参数输入：id		节点ID<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	collapseAll: function(id){
		return this.getElement().treegrid('collapseAll',id);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTreeGrid.expandAll<br>
	 * 函数功能：展开所有的节点。<br>
	 * 参数输入：id		节点ID<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	expandAll: function(id){
		return this.getElement().treegrid('expandAll',id);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTreeGrid.expandTo<br>
	 * 函数功能：从根部展开一个指定的节点。<br>
	 * 参数输入：id		节点ID<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	expandTo: function(id){
		return this.getElement().treegrid('expandTo',id);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTreeGrid.toggle<br>
	 * 函数功能：切换节点的展开/折叠状态。<br>
	 * 参数输入：id		节点ID<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	toggle: function(id){
		return this.getElement().treegrid('toggle',id);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTreeGrid.append<br>
	 * 函数功能：追加一些子节点到一个父节点。<br>
	 * 参数输入：'param' 参数包括下列属性：
	 * 					parent：父节点的 id，如果没有分配，则追加为根节点。
	 * 					data：数组，节点的数据。<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	append: function(param){
		return this.getElement().treegrid('append',param);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTreeGrid.insert<br>
	 * 函数功能：在指定节点的前边或后边插入一个节点。<br>
	 * 参数输入：'param' 参数包括下列属性：
	 * 					before：前边插入的节点的 id 值。
	 * 					after：后边插入的节点的 id 值。
	 * 					data：新的节点数据<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	insert: function(param){
		return this.getElement().treegrid('insert',param);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTreeGrid.remove<br>
	 * 函数功能：移除节点和它的子节点。<br>
	 * 参数输入：id		节点ID<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	remove: function(id){
		return this.getElement().treegrid('remove',id);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTreeGrid.pop<br>
	 * 函数功能：弹出节点并在移除该节点后返回包含其子节点的节点数据。<br>
	 * 参数输入：id		节点ID<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	pop: function(id){
		return this.getElement().treegrid('pop',id);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTreeGrid.refresh<br>
	 * 函数功能：刷新指定的节点。<br>
	 * 参数输入：id		节点ID<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	refresh: function(id){
		return this.getElement().treegrid('refresh',id);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTreeGrid.update<br>
	 * 函数功能：更新指定的节点。<br>
	 * 参数输入：'param' 参数包括下列属性：
	 * 					id：表示要被更新的节点的 id。
	 * 					row：新的行数据。<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	update: function(param){
		return this.getElement().treegrid('update',param);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTreeGrid.beginEdit<br>
	 * 函数功能：开始编辑节点。<br>
	 * 参数输入：id		节点ID<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	beginEdit: function(id){
		return this.getElement().treegrid('beginEdit',id);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTreeGrid.endEdit<br>
	 * 函数功能：结束编辑节点。<br>
	 * 参数输入：id		节点ID<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	endEdit: function(id){
		return this.getElement().treegrid('endEdit',id);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTreeGrid.cancelEdit<br>
	 * 函数功能：取消编辑节点。<br>
	 * 参数输入：id		节点ID<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	cancelEdit: function(id){
		return this.getElement().treegrid('cancelEdit',id);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTreeGrid.getEditors<br>
	 * 函数功能：获取指定行的编辑器。每个编辑器有下列属性：
	 * 				actions：编辑器可以做的动作。
	 * 				target：目标编辑器的 jQuery 对象。
	 * 				field：字段名。
	 * 				type：编辑器的类型。<br>
	 * 参数输入：id		节点ID<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	getEditors: function(id){
		return this.getElement().treegrid('getEditors',id);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTreeGrid.getEditor<br>
	 * 函数功能：获取指定的编辑器。<br>
	 * 参数输入：param 参数包含两个属性：
	 * 					id：行节点的 id。
	 * 					field：字段名。<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	getEditor: function(param){
		return this.getElement().treegrid('getEditor',param);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTreeGrid.showLines<br>
	 * 函数功能：显示表格线<br>
	 * 参数输入：无<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	showLines: function(){
		return this.getElement().treegrid('showLines');
	},
});